web消息通讯方式--即时聊天

之前在一个项目中涉及到即时聊天功能,特此记录下当时的解决方法。

目前web上的消息通讯方式主要有以下几种。轮询,长连接,websocket

  • 轮询:隔一段时间访问服务器,服务器不管有没有新消息都立刻返回。
  • 长连接:页面向服务器发出请求,由服务器决定什么时候返回。(如果有新消息则立刻返回,没有的话就保持连接,直到有新消息才返回)
  • websocket:类似Java Socket,由Http请求模拟实现的socket。

本次使用轮询方法做解决

以下是轮询的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 //返回未读json列  实现实时聊天 延迟1s
//超时链处理 原则上和session保持一致 (例如session30分钟 180 000 毫秒)
Integer sessionsec = 1800000;
Integer sessionstop = 0;

boolean isnewmess = false;
//1.此处判断是否有新的聊天数据更新
if(isnewmess){
// 返回消息内容
}else{
//2.执行循环操作
while (isnewmess==false) {
//2.1 如果没有继续判断(节省服务器开销 进行休眠2 秒 为了保证实时性)
sessionstop +=2000;
if (sessionstop>=sessionsec) {
isnewmess = true;
//此处销毁链接 返回特征码
}else{
Thread.sleep(1000);
//此处判断是否有新的聊天数据更新
if (isnewmess) {
//返回消息内容
break;
}
}
}
}